From d13cd02ab938dc75aef281400064d9923ae58a6b Mon Sep 17 00:00:00 2001 From: Hollis Blanchard Date: Fri, 8 Sep 2006 10:23:56 -0500 Subject: [PATCH] [XEN][POWERPC] Fix allocation error for xencomm "mini" descriptors. Previous code worked correctly only if the allocated structure fit in the same page as the base address. If the structure did not fit, the computation for the allocation was incorrect. Noticed by Kiyokuni KAWACHIYA . Signed-off-by: Maria Butrico Signed-off-by: Hollis Blanchard --- xen/arch/powerpc/of_handler/xencomm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xen/arch/powerpc/of_handler/xencomm.c b/xen/arch/powerpc/of_handler/xencomm.c index 867fcd77b3..b82acbacf2 100644 --- a/xen/arch/powerpc/of_handler/xencomm.c +++ b/xen/arch/powerpc/of_handler/xencomm.c @@ -50,18 +50,18 @@ static int __xencomm_init(struct xencomm_desc *desc, void *buffer, static void *__xencomm_alloc_mini(void *area, int arealen) { unsigned long base = (unsigned long)area; - unsigned int pageoffset; + unsigned int left_in_page; - pageoffset = base % PAGE_SIZE; + left_in_page = PAGE_SIZE - base % PAGE_SIZE; /* we probably fit right at the front of area */ - if ((PAGE_SIZE - pageoffset) >= sizeof(struct xencomm_mini)) { + if (left_in_page >= sizeof(struct xencomm_mini)) { return area; } /* if not, see if area is big enough to advance to the next page */ - if ((arealen - pageoffset) >= sizeof(struct xencomm_mini)) - return (void *)(base + pageoffset); + if ((arealen - left_in_page) >= sizeof(struct xencomm_mini)) + return (void *)(base + left_in_page); /* area was too small */ return NULL; -- 2.30.2